#include<iostream>
#include<regex>
#include<string>


int main()
{
    //http请求格式:     GET /sbhghx/login?user=ghx&pass=123456 HTTP/1.1\r\n
    std::string str = "GET /sbhghx/login?user=ghx&pass=123456 HTTP/1.1\r\n";
    std::smatch matches;

    //请求方法 GET HEAD POST PUT DELETE
    std::regex e("(GET|HEAD|POST|PUT|DELETE) ([^?]*)(?:\\?(.*))? (HTTP/1\\.[01])(?:\n|\r\n)?");
    //(GET|HEAD|POST|PUT|DELETE)表示匹配并提取其中任意一个字符串
    //([^?]*) 匹配非？字符 *表示0次或多次
    //\\?(.*) \\?表示原始的？ (.*)表示？之后的字符匹配0次或多次，直到遇到空格
    //(HTTP/1\\.[01])  表示匹配以HTTP/1.开始，后边为0 或1 的字符串
    //(?:\n|\r\n)? （?:...）表示匹配某个格式的字符串但是不提取 最后的问号表示匹配前边的表达式0次或1次 

    bool ret = std::regex_match(str,matches,e);

    if(ret ==false)
        return -1;

    for(auto &s :matches)
    {
        std::cout << s << std::endl;
    }

    return 0;
}